const path = require('path');

class VuePackPlugin {
  constructor(options) {
    this.options = options;
  }

  apply(compiler) {
    compiler.hooks.emit.tapAsync('VuePackPlugin', (compilation, callback) => {
      const { vueFiles } = this.options;

      // 遍历所有的资源文件
      for (const filename in compilation.assets) {
        // 判断是否为vue文件
        if (filename.endsWith('.vue')) {
          // 判断是否在指定的vue文件目录中
          if (vueFiles.includes(filename)) {
            // 添加该文件及其依赖文件到打包结果中
            const file = compilation.assets[filename];
            compilation.assets[filename] = file;

            // 获取该文件的依赖文件
            const dependencies = file.getDependencies();
            dependencies.forEach(dependency => {
              // 判断依赖文件是否在指定的vue文件目录中
              if (vueFiles.includes(dependency)) {
                // 添加依赖文件到打包结果中
                const depFile = compilation.assets[dependency];
                compilation.assets[dependency] = depFile;
              }
            });
          } else {
            // 移除不在指定目录中的vue文件
            delete compilation.assets[filename];
          }
        }
      }

      callback();
    });
  }
}

module.exports = VuePackPlugin;